]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
keyboard: Request a bigger size in portrait orientation
authorFlorian Müllner <fmuellner@gnome.org>
Sat, 4 Jul 2020 00:36:10 +0000 (02:36 +0200)
committerFlorian Müllner <florian.muellner@gmail.com>
Mon, 6 Jul 2020 15:16:35 +0000 (15:16 +0000)
In portrait orientation, we set the height to the preferred height
for the monitor width (or, if smaller, a third o the screen height).

However as the forWidth currently doesn't make a difference, the height
is effectively controlled by the natural height of the keys - which is
rather small.

Address this by making AspectContainer request an appropriate preferred
size based on the fixed ratio.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2349

js/ui/keyboard.js

index 62df5922f754064d6d7834966a79a4a7d848df00..c9b3dd5f7754bf16c3b8f3baf80a62831599242d 100644 (file)
@@ -61,6 +61,24 @@ class AspectContainer extends St.Widget {
         this.queue_relayout();
     }
 
+    vfunc_get_preferred_width(forHeight) {
+        let [min, nat] = super.vfunc_get_preferred_width(forHeight);
+
+        if (forHeight > 0)
+            nat = forHeight * this._ratio;
+
+        return [min, nat];
+    }
+
+    vfunc_get_preferred_height(forWidth) {
+        let [min, nat] = super.vfunc_get_preferred_height(forWidth);
+
+        if (forWidth > 0)
+            nat = forWidth / this._ratio;
+
+        return [min, nat];
+    }
+
     vfunc_allocate(box) {
         if (box.get_width() > 0 && box.get_height() > 0) {
             let sizeRatio = box.get_width() / box.get_height();
@@ -1608,7 +1626,8 @@ class Keyboard extends St.BoxLayout {
              * we allow the OSK being smaller than 1/3rd of the monitor height
              * there.
              */
-            const [, natHeight] = this.get_preferred_height(monitor.width);
+            const forWidth = this.get_theme_node().adjust_for_width(monitor.width);
+            const [, natHeight] = this.get_preferred_height(forWidth);
             this.height = Math.min(maxHeight, natHeight);
         }
     }